import xlwt
import datetime
# xlrd库：读取excel文件，支持xls和xlsx格式（最新版好像不支持xlsx，解决方法可自行搜索）。
# xlwt库：写入excel文件，只支持xls格式。

# xlwt 库使用
# 使用xlwt库写入excel文件并操作文件
# xlwt创建一个全新的excel文件,然后对这个文件进行写入内容以及保存
# 新建工作簿
# xlsx = xlwt.Workbook( encoding="utf-8" ) 新建Workbook对象，参数为设置编码为utf-8
# 添加工作表sheet
# sheet = xlsx.add_sheet( "sheet1", cell_overwrite_ok=True ) 参数：工作表名称；是否允许覆盖写入，默认为False，如果为False，如果在代码中对同一单元格多次写入时会报错
# 设置单元格宽度
# sheet.col(0).width = 256 * num 设置第一列的宽度，num为字符的个数，256为单个字符的宽度
# 写入单元格
# sheet.write( i, j, content, style ) 写入第i行第j列的单元格（从0开始计数），content为内容，style为实现设定的单元格样式
# sheet.write(i,j,xlwt.Formula('HYPERLINK("url"; "url-name")') 单元格写入超链接
# sheet.write(i,j,xlwt.Formula('A1*B1')) 单元格写入公式
# 合并单元格写入
# sheet.write_merge( topRow, bottomRow, leftCol, rightCol, content, style)
# 保存工作簿
# xlsx.save( path ) 写入的内容必须与工作簿的编码一致，否则在保存的时候会报错，比如，设置编码为utf-8，那么所有写入的内容都必须是utf-8的编码
# 单元格样式说明
# alignment = xlwt.Alignment() #新建alignment
# alinment.horz = xlwt.Alignment.VERT_TOP # 设置水平方向向上对齐
# alignment.vert = xlwt.Alignment.VERT_CENTER # 设置水平方向居中对齐
# alignment.vert = xlwt.Alignment.VERT_BOTTOM # 设置水平方向向下对齐
# alignment.horz = xlwt.Alignment.HORZ_TOP # 设置垂直方向向左对齐
# alignment.horz = xlwt.Alignment.HORZ_CENTER # 设置垂直方向居中对齐
# alignment.horz = xlwt.Alignment.HORZ_BOTTOM # 设置垂直方向向右对齐
# alignment.horz = xlwt.Alignment.HORZ_JUSTIFIED # 设置水平方向两端对齐
# alignment.wrap = xlwt.Alignment.WRAP_AT_RIGHT #设置自动换行
# font = xlwt.Font() # 通过Font()创建属性对象
# font.bold = True #字体加粗
# font.height = 12 * 20，12号的字体 #设置字体大小
# font.name = "SimSun" #设置为宋体
# font.underline = True #字体加下划线
# font.italic = True #字体倾斜
# font.colour_index = 4 #设置字体颜色
# pattern = xlwt.Pattern() #新建pattern
# pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 设置单元格填充样式，第一个pattern是对象，第二个pattern是属性
# pattern.pattern_fore_colour = 3 #设置填充颜色
# borders = xlwt.Borders() #新建borders
# borders.left = xlwt.Borders.THIN #设置表格边框样式，实线
# borders.right = xlwt.Borders.DASHED #设置表格边框样式，虚线
# borders.top = xlwt.Borders.NO_LINE #设置表格边框样式，无边线
# borders.bottom = xlwt.Borders.THIN
# borders.left_color = 0x40 #设置左边框颜色
# style = xlwt.XFStyle() #新建style
# style.alignment = alignment #为style设置alignment，即将属性对象赋予XFStyle对象
# style.font = font #为style设置font
# style.borders = borders #为style设置borders
# style.pattern = pattern #为style设置pattern
# 设置列宽
# worksheet.col(index).width = 256 * n 
# 设置行高
# worksheet.col(index).height_mismatch = True # 初始化数据
# worksheet.row(index).height = n * m


# 创建一个工作簿，设置编码为utf-8，并压缩样式style_compression
work_book = xlwt.Workbook(encoding='utf-8', style_compression=0)
# 在工作簿中添加一个工作表，名字为testSheet
work_sheet = work_book.add_sheet('testSheet')
# 在testSheet中，第一行第一列写入'Daniel'
work_sheet.write(0, 0, 'Daniel')
# 在testSheet中，第二行第一列写入'18'，这里的label参数是用来指定单元格样式
work_sheet.write(1, 0, label='18')
# 在testSheet中，第一行第二列写入'test'，这里的label参数是用来指定单元格样式
work_sheet.write(0, 1, label='test')
# 初始化样式
style = xlwt.XFStyle()
# 设置字体样式
font = xlwt.Font()  
font.name = '宋体'  # 字体名称  
font.height = 240  # 字体大小，1/20为Excel中的字号  
font.bold = True   # 是否加粗  
font.colour_index = 4 # colour_index属性接受的是一个整数值，该值对应于xlwt.Style.colour_map字典中的颜色
style.font = font
# 设置边框
borders = xlwt.Borders()  
borders.left = xlwt.Borders.THIN  # 左边框为细线  
borders.right = xlwt.Borders.THIN  # 右边框为细线  
style.borders = borders
# 在testSheet中，第一行第三列写入当前时间
style.num_format_str = 'YYYY-MM-DD HH:MM:SS'  # 设置时间格式
work_sheet.write(0, 2, datetime.datetime.now(),style)
# 写入数据，应用样式
work_sheet.write(3, 3, 'Message样式运用', style)
# 合并第六行，第七行，第一到第四列的单元格，内容为'合并单元格'
work_sheet.write_merge(6, 7, 0, 3, '合并单元格', style)
# 保存工作簿为test.xls文件，传参只能是地址，如有参数则是另存为，若无传参则是保存
work_book.save('test.xls')
# 或使用下面方式创建对象保存
# work_book = xlwt.Workbook("test1.xls",encoding='utf-8', style_compression=0)
# work_book.save()
